package com.cskaoyan.javase.oop1._10static._3compare;

/**
 * 我们从以下四个角度比较（拿成员变量为例）
 * 1. 成员的所属
 *      成员变量: 一个对象一份,属于对象
 *      静态成员变量: 全体对象共享,属于类
 *
 * 2. 在内存中的位置
 *      成员变量: 堆上的对象中
 *      静态成员变量: 严格来说,java8中,它也在堆上(反正它是被对象共享的)
 *
 * 3. 在内存中出现的时间
 *      成员变量: 对象创建以后才会出现
 *      静态成员变量: 类加载过程中完成初始化赋值,就可以使用了
 *
 * 4. 调用方式
 *      成员变量: 对象名点
 *      静态成员变量: 类名点
 *
 * 静态成员方法和普通成员方法的区别和上述类似，我们主要思考以下两个问题就可以了：
 * 1. 在静态方法中，能否访问非静态的成员，为什么？
 *      static方法能否访问普通成员(变量和方法),不能,普通成员依赖对象存在,但类加载完后就可以使用静态方法了
 *      类加载后完全可能没有对象,自然无法访问
 *
 * 2. 在普通成员方法中，能否访问静态成员，为什么？
 *      可以,既然成员方法已经调用了,那么意味着肯定完成类加载了.静态成员肯定存在并且能够访问了.
 *
 *
 * @since 16:00
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

    }

    public void test() {
        testStatic();
    }

    public static void testStatic() {
        Demo d = new Demo();
        d.test();
    }
}

